利用 MLP(多层感知器)和 RBF(径向基函数)神经网络解决的近似和分类示例问题(Matlab代码实现) |
您所在的位置:网站首页 › 编程0 1 › 利用 MLP(多层感知器)和 RBF(径向基函数)神经网络解决的近似和分类示例问题(Matlab代码实现) |
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述1、径向基神经网络 径向基函数网络是由三层构成的前向网络:第一层为输入层,节点个数的能与输入的维数;第二层为隐含层,节点个数视问题的复杂度而定;第三层为输出层,节点个数等于输出数据的维数。由径向基函数的定义可知,函数值仅与自变量的范数有关。 2、多层感知器 多层感知器(MLP,Multilayer Perceptron)是一种前馈人工神经网络模型,其将输入的多个数据集映射到单一的输出的数据集上。 3、两者的异同 对于任意一个多层感知器,都存在一个可以替代它的径向基神经网络,反之,任意一个径向基神经网络,也存在一个多层感知器可以替代它。两者功能相近,但又有明显区别: 径向基神经网络是三层网络(输入层、隐含层、输出层),只有一个隐含层,而多层感知器则可以有多个隐含层。 径向基神经网络的隐含层和输出层完全不同,隐含层采用非线性函数(径向基函数)作为基函数,而输出层采用线性函数,两者作用不同。在多层感知器中,隐含层和输出层没有本质区别,一般都采用非线性函数。由于径向基函数网络输出的是线性加权和,因此学习速度更快。 径向基神经网络的基函数计算的是输入向量与基函数中心之间的欧氏距离(两者取差值,再取欧几里得范数),而多层感知器的隐单元的激励函数则计算输入向量与权值的内积。 多层感知器对非线性映射全局逼近,而径向基函数使用局部指数衰减的非线性函数进行局部逼近,因此,要达到相同的精度,径向基函数需要的参数比多层感知器少得多。 BP网络使用sigmoid函数作为激励函数,有很大的输入可见域。径向基函数网络引入RBF函数,当输入值偏离基函数中心时,输出逐渐减小,并很快趋于零。这一点比多层感知器更符合神经元响应基于感受域这一特点,比BP网络具有更深厚的理论基础。同时由于输入可见区域很小,径向基函数网络需要更多的径向基神经元。 📚2 运行结果主函数部分代码: % Program for MLP.......................................... % Update weights for a given epoch clear all; close all; clc; weights = zeros(1,30,4); weights_in = zeros(30,10,4); errors = zeros(4,1); for set=1:4 switch set % Set 1 case 1 inp_rows = [251:1000]; out_rows = [1:250]; % Set 2 case 2 inp_rows = [1:250 501:1000]; out_rows = [251:500]; % Set 3 case 3 inp_rows = [1:500 751:1000]; out_rows = [501:750]; % Set 4 case 4 inp_rows = [1:750]; out_rows = [751:1000]; end % Load the training data.................................................. file=xlsread('fin_19.xlsx'); for i=1:11 minval = min(file(:,i)) ; maxval = max(file(:,i)); minmat = ones(size(file,1),1).*minval; maxmat = ones(size(file,1),1).*maxval; tp =ones(size(file,1),1); file(:,i)= ((file(:,i) - minmat) ./ (maxmat -minmat)).* 2 - tp ; end Ntrain = file(inp_rows,:); [NTD,~] = size(Ntrain); % Initialize the Algorithm Parameters..................................... inp = 10; % No. of input neurons hid = 30; % No. of hidden neurons out = 1; % No. of Output Neurons lam = 0.0001; % Learning rate epo = 2000; % Initialize the weights.................................................. Wi = 0.001*(rand(hid,inp)*2.0-1.0); % Input weights Wo = 0.001*(rand(out,hid)*2.0-1.0); % Output weights % Train the network....................................................... for ep = 1 : epo sumerr = 0; DWi = zeros(hid,inp); DWo = zeros(out,hid); for sa = 1 : NTD xx = Ntrain(sa,1:inp)'; % Current Sample tt = Ntrain(sa,inp+1:end)'; % Current Target Yh = 1./(1+exp(-Wi*xx)); % Hidden output Yo = Wo*Yh; % Predicted output er = tt - Yo; % Error DWo = DWo + lam * (er * Yh'); % update rule for output weight DWi = DWi + lam * ((Wo'*er).*Yh.*(1-Yh))*xx'; %update for input weight sumerr = sumerr + sum(er.^2); end Wi = Wi + DWi; Wo = Wo + DWo; % disp(sqrt(sumerr/(NTD))) % save -ascii Wi.dat Wi; % save -ascii Wo.d at Wo; end 🎉3 参考文献[1]张驰,郭媛,黎明.人工神经网络模型发展及应用综述[J].计算机工程与应用,2021,57(11):57-69. 👨💻4 Matlab代码 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |